package com.bluesky.lock;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DistributeLockConfiguration {

    /**
     *  @ConditionalOnMissingBean 是 Spring Boot中的一个条件注解，用于在容器中不存在指定类型的 Bean 时，才会创建被注解的 Bean。
     *  这个注解主要用于自动配置场景，确保 Spring 容器中只有一个特定类型的实例‌
     *
     *  ‌使用场景‌：
     * ‌自动配置‌：在自动配置类中使用，确保在特定条件下创建 Bean。例如，当容器中不存在某个类型的 Bean 时，才创建一个新的实例‌。
     * ‌单一实例‌：当一个接口有多个实现类时，确保 Spring 容器中只有一个实现类的实例。通过在每个实现类上使用 @ConditionalOnMissingBean 注解，可以保证只有一个实现类被注册‌。
     * ‌条件‌：
     * Bean 存在性检查‌：在容器加载 Bean 时，检查容器中是否存在目标类型的 Bean。如果不存在，则加载并注册该 Bean；如果存在，则跳过默认的加载动作‌
     *
     * @return
     */
    @Bean
    @ConditionalOnMissingBean
    public DistributeLock distributeLock(){
        return new defaultDistributeLock();
    }
}
